/////*  File Name	: socket.cpp
//// *  Author		: Javie Pong
//// *	 E-mail		: 823960168@qq.com
//// *  Created on	: 2012-4-8
//// *  Description:
//// */
////
////#include <bits/local_lim.h>
/////*
//// * main.cpp
//// *
//// *  Created on: 2012-2-7
//// *      Author: root
//// */
//#include <iostream>
//#include <unistd.h>
//#include <stdio.h>
//#include <signal.h>
//
//#include <stdlib.h>
//#include <sys/types.h>
//#include <sys/socket.h>
//#include <netinet/in.h>
//#include <arpa/inet.h>
//#include <sys/epoll.h>
//#include <string.h>
//#include <errno.h>
//#include <fcntl.h>
////
//bool G_STOP = false;
//typedef void (*SIG_HANDLE)(int);
//#define SIG_HANDLE_FUN SIG_HANDLE(handle_signal_1);
////void handle_signal(int sig,siginfo_t *sig_info,void *p);
////void handle_signal_1(int sig);
////void sigaction_test();
////
//void epoll_sever();
//int socket_client(int n);
//
////int main(int argc,char *argv[])
////{
//////	if(argc >1 && atoi(argv[1])==1)
//////	{
//////		if(argc>2)
//////		{
//////			return socket_client(atoi(argv[2]));
//////		}
//////		return 0;
//////	}
////
////	sigaction_test();
////
////	//epoll_sever();
////
////
////	return 0;
////}
//
//
/////////////////////////////////////////////////////////////////////////////////////////
//void handle_signal(int sig,siginfo_t *sig_info,void *p)
//{
//	std::cout <<"signal is:"<< sig <<"\n"<< sig_info->si_errno
//			<<"\n"<<sig_info->si_code << std::endl;
//	G_STOP = true;
//}
//void handle_signal_1(int sig)
//{
//	std::cout <<"signal is:"<< sig << std::endl;
//	G_STOP = true;
//}
//void sigaction_test()
//{
//	struct sigaction sig_act1;
//	sigemptyset(&sig_act1.sa_mask);
//	sig_act1.sa_flags = SA_SIGINFO;
//	sig_act1.sa_sigaction = handle_signal;
//	sigaction(20,&sig_act1,&sig_act1);
//
//	//sigaction(21,&sig_act1,&sig_act1);
//
//	struct sigaction sig_act2;
//	sigemptyset(&sig_act2.sa_mask);
//	sig_act2.sa_flags = SA_SIGINFO;
//	sig_act2.sa_sigaction = handle_signal;
//	sigaction(21,&sig_act2,&sig_act2);
//
//	while(!G_STOP)
//	{
//		sleep(2);
//		std::cout << "-----signal test------" << std::endl;
//	}
//}
/////////////////////////////////////////////////////////////////////////////////////////
//
//void epoll_sever()
//{
//	int sockfd = socket(AF_INET,SOCK_STREAM,0);
//
//	fcntl(sockfd,F_SETFL,O_NONBLOCK);
//	struct sockaddr_in server_addr;
//	bzero(&server_addr,sizeof(server_addr));
//	server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
//	server_addr.sin_port = htons(10000);
//	server_addr.sin_family = AF_INET;
//
//	int ret = bind(sockfd,(sockaddr*)&server_addr,sizeof(server_addr));
//	if(ret!=0)
//	{
//		std::cout <<"bind error"<< std::endl;
//		return ;
//	}
//
//	ret =listen(sockfd,8);
//	if(ret!=0)
//		{
//			std::cout <<"listen error"<< std::endl;
//			return ;
//		}
//
//
//	struct epoll_event event;
//	event.events = EPOLLIN | EPOLLET | EPOLLERR | EPOLLONESHOT;
//	event.data.fd = sockfd;
//
//	int ep_fd = epoll_create(1);
//
//	ret = epoll_ctl(ep_fd,EPOLL_CTL_ADD,sockfd,&event);
//	if(ret!=0)
//	{
//		std::cout <<"epoll_ctl_add error"<< std::endl;
//	}
//
//	int num_of_active_event = 0;
//	while (true)
//	{
//		num_of_active_event = epoll_wait(ep_fd, &event, 1, 0);
//		if (num_of_active_event ==-1)
//		{
//			break;
//		}
//		if(num_of_active_event>0)
//		{
//			int event_fd = event.data.fd;
//			event.data.fd = -1;
//			std::cout <<"receive event fd:"<< event_fd<<std::endl;
//			int op = 0;;
//
//			if(event_fd == sockfd)
//			{
//				std::cout <<"listen fd:"<< event_fd<<std::endl;
//				op = EPOLL_CTL_ADD;
//				int conn_fd = accept(sockfd,(sockaddr*)NULL,NULL);
//				event_fd = conn_fd;
////			}
////			else if(event_fd!=-1)
////			{
//				fcntl(event_fd,F_SETFL,O_NONBLOCK);
//				op = EPOLL_CTL_MOD;
//				std::cout <<"event fd:"<< event_fd<<std::endl;
//				sockaddr_in client_addr;
//				bzero(&client_addr,sizeof(client_addr));
//				socklen_t len = sizeof(struct sockaddr);
//				::getpeername(event_fd,(sockaddr*)&client_addr,&len);
//				char conn_addr[16]={0};
//				::sprintf(conn_addr,"%s",::inet_ntoa(client_addr.sin_addr));
//				int port = ntohs(client_addr.sin_port);
//				std::cout<< "ip:" <<conn_addr << "  port:"<<port<<std::endl;
//
//				char recv_content[1024]={0};
//				int recv_len = recv(event_fd,recv_content,sizeof(recv_content),MSG_NOSIGNAL);
//				if(recv_len>0)
//				{
//					std::cout <<"recv: "<<recv_content <<std::endl;
//				}
//			}
//			if (sockfd != -1 && op!=0)
//			{
//				struct epoll_event event_tmp;
//				event_tmp.events = EPOLLIN | EPOLLET | EPOLLERR | EPOLLONESHOT;
//				event_tmp.data.fd = -1;
//
//				ret = epoll_ctl(ep_fd, op, sockfd, &event_tmp);
//				if (ret != 0)
//				{
//					std::cout << "epoll_ctl_mod error:" << strerror(errno) << ret << op << sockfd
//							<< std::endl;
//				}
//			}
//
//		}
//	}
//
//}
//
//int socket_client(int n)
//{
//	int sockfd = socket(AF_INET,SOCK_STREAM,0);
//
//	struct sockaddr_in server_addr;
//	bzero(&server_addr,sizeof(server_addr));
//	server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
//	server_addr.sin_port = htons(10000);
//	server_addr.sin_family = AF_INET;
//
//	int ret = connect(sockfd,(sockaddr*)&server_addr,sizeof(server_addr));
//	if(ret!=0)
//	{
//		std::cout <<"connect error"<< std::endl;
//	}
//	for (int i = 0; i < n; i++)
//	{
//		char send_content[] = "this is lucy,answer please--------------------------------------------------fasd!";
//		ret = send(sockfd, (void*) send_content, sizeof(send_content),
//				MSG_DONTWAIT);
//		if (ret == -1)
//		{
//			std::cout << "send error:" << ret << std::endl;
//			break;
//		}
//	}
//	int start = time(0);
//	usleep(100);
//	int end = time(0);
//	std::cout <<start<<"  "<<end<<"  "<<(end-start)<<"close fd:"<<sockfd<< std::endl;
//	close(sockfd);
//	return 0;
//}
//
//
//
